/*
 * main.c
 *  Created on: Aug 20, 2011
 *      Author: diegolascasas
 */
#include "bignum.h"

/* Le uma linha do input */
void leitura(FILE* entrada, bignum** n,bignum** m){
  
  char* a = malloc(MAXSTRING*sizeof(char));
  char* b = malloc(MAXSTRING*sizeof(char));
  
  if (fscanf(entrada,"%s %s",a,b)!=2)
    error("Erro na leitura");

  criar(n,a);
  /* printf("tamanho de n: %i\n",(*n)->tamanho);/**/

  criar(m,b);
  /* printf("tamanho de m: %i\n",(*m)->tamanho);/**/
  
  free(a);
  free(b);
}

/*funcao de auxilio para informar como usar o programa*/
void usage(){
  printf("Usage: \n ./programa <entrada>\n"); 
  printf("\t entrada: \t\t  Arquivo de dados\n"); 
}


/*funcao de teste para checar as funcoes de criacao, destruicao e impressao do bignum /**/
void imprimeentrada(FILE* f){
  
  bignum* n;
  bignum* m;
  leitura(f,&n,&m);
  
   /* printf("tamanho de n inicial: %i\n",n->tamanho);/**/
   /* printf("tamanho de m inicial: %i\n",m->tamanho);/**/
  
  while(n->tamanho!=0 && m->tamanho!=0) {
    
    imprimir(n); 
    destruir(n);
    printf(" ");

    imprimir(m);
    destruir(m);
    printf("\n");

    leitura(f,&n,&m);
  }
  
  destruir(n);
  destruir(m);

  printf("Fim da Entrada");
}


void imprimesoma(FILE* f){
  
  bignum *n,*m;
  bignum *total;
  leitura(f,&n,&m);
  
  while(n->tamanho!=0 || m->tamanho!=0) {
    
    imprimir(n);
    printf(" + ");
    imprimir(m);
    printf(" = ");
    somar(&total,n,m);
    imprimir(total);
    printf("\n");
    destruir(total);

    leitura(f,&n,&m);
  }
  
  destruir(n);
  destruir(m);

  printf("Fim da Entrada\n\n");
}



int main(int argc, char *argv[]){

  FILE* f;

  if (argc!=2){
    usage();
    error("Numero de argumentos invalido");  
  }

  printf("Debug: Comecei!\n");	
  fflush(NULL);  
  
  f = fopen(argv[1],"r");
  if (f==NULL)
    error("Nao foi possivel abrir o arquivo.");

  imprimesoma(f);
  
  fclose(f);
  return 0;
}


